package utils

import (
	"io/ioutil"
	"os"
)

// var pathSeparator = string(os.PathSeparator) // 路径分割符

// 判断文件夹是否存在
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}

	return false, err
}

// 递归创建文件夹
func MkDirAll(dir string) error {
	exi, err := PathExists(dir)
	if err != nil {
		return err
	}
	if !exi {
		// 创建文件夹
		return os.MkdirAll(dir, os.ModePerm)
	}

	return nil
}

// 将文件整个读入内存(效率比较高，占用内存也最高)
func ReadAllFile(path string) (string, error) {
	file, err := os.Open(path)
	if err != nil {
		return "", err
	}
	defer file.Close()
	content, err := ioutil.ReadAll(file)
	if err != nil {
		return "", err
	}

	return string(content), nil
}

// 递归获取指定目录下的所有文件名
func GetAllFileName(pathname string) ([]string, error) {
	result := []string{}
	fis, err := ioutil.ReadDir(pathname)
	if err != nil {
		return result, err
	}

	// 所有文件/文件夹
	for _, fi := range fis {
		fullname := pathname + "/" + fi.Name()
		// 是文件夹则递归进入获取;是文件，则压入数组
		if fi.IsDir() {
			temp, err := GetAllFileName(fullname)
			if err != nil {
				return result, err
			}
			result = append(result, temp...)
		} else {
			result = append(result, fullname)
		}
	}

	return result, nil
}
